
package CCT220_Aula09_Exemplo02_13106;

/**
 * Implementação de uma classe abstrata
 * 
 * @author marcel
 * 
 */
public abstract class Pessoa {
	/*
	 * ************Atributes************
	 */
	private String       aNome     = "";
	private String       aEndereco = "";
	private String       aSexo     = "";
	private int          aIdade    = 0;
	private Disciplina[] aDisciplina;


	/*
	 * ************Construtores************
	 */
	/**
	 * Construtor
	 * 
	 * @param pDisciplina
	 */
	public Pessoa(Disciplina pDisciplina[]) {

		this.aDisciplina = pDisciplina;
	}


	/**
	 * Construtor
	 * 
	 * @param pNome
	 * @param pEndereco
	 * @param pSexo
	 * @param pIdade
	 */
	public Pessoa(String pNome, String pEndereco, String pSexo, int pIdade) {

		this.aNome = pNome;
		this.aEndereco = pEndereco;
		this.aSexo = pSexo;
		this.aIdade = pIdade;
	}


	/**
	 * Construtor
	 * 
	 * @param pNome
	 * @param pEndereco
	 * @param pSexo
	 * @param pIdade
	 * @param pDisciplina
	 */
	public Pessoa(String pNome, String pEndereco, String pSexo, int pIdade,
	        Disciplina pDisciplina[]) {

		this(pNome, pEndereco, pSexo, pIdade);
		this.aDisciplina = pDisciplina;
	}


	/**
	 * Construtor default
	 */
	public Pessoa() {

	}


	/*
	 * ************Seters************
	 */
	/**
	 * @param pNome
	 */
	public void setNome(String pNome) {

		aNome = pNome;
	}


	/**
	 * @param pEndereco
	 */
	public void setEndereco(String pEndereco) {

		aEndereco = pEndereco;
	}


	/**
	 * @param pSexo
	 */
	public void setSexo(String pSexo) {

		if ((!pSexo.equalsIgnoreCase(Util.MASCULINO))
		        && (!pSexo.equalsIgnoreCase(Util.FEMININO))) {
			System.out.println("O conteúdo informado para"
			        + " o atributo sexo não é válido");
		} else {
			aSexo = pSexo;
		}
	}


	/**
	 * @param pIdade
	 */
	public void setIdade(int pIdade) {

		/*
		 * Determina uma regra de validação do
		 * atributo idade, evitando que qualquer
		 * valor seja atributo
		 */
		if ((pIdade < Util.MIN_IDADE) || (pIdade > Util.MAX_IDADE)) {
			System.out.println("Idade deve ser maior ou igual a "
			        + Util.MIN_IDADE + " e menor ou igual " + Util.MAX_IDADE);
		} else {
			aIdade = pIdade;
		}
	}


	/*
	 * ************Geters************
	 */
	/**
	 * @return aNome
	 */
	public String getNome() {

		return aNome;
	}


	/**
	 * @return aEndereco
	 */
	public String getEndereco() {

		return aEndereco;
	}


	/**
	 * @return aSexo
	 */
	public String getSexo() {

		return aSexo;
	}


	/**
	 * @return aIdade
	 */
	public int getIdade() {

		return aIdade;
	}


	/*
	 * ************Methods************
	 */
	/**
	 * @return Descricao do objeto
	 */
	public String getDescricao() {

		String mensagem = aNome + " reside na " + aEndereco + " e possui "
		        + aIdade + " anos de idade";
		if (aSexo.equalsIgnoreCase(Util.MASCULINO)) {
			return mensagem = "O Sr. " + mensagem;
		} else {
			return mensagem = "A Sra. " + mensagem;
		}
	}


	/**
	 * @param pIndice
	 * @return descricao da disciplina no indice
	 *         pIndice deste objeto
	 */
	public String getDisciplina(int pIndice) {

		return aDisciplina[pIndice].getDescricao();
	}


	/**
	 * @return Descricao das disciplinas deste
	 *         objeto
	 */
	public String getDisciplinas() {

		String retorno = "";
		for (Disciplina element : aDisciplina) {
			retorno += element.getDescricao() + "\n";
		}
		return retorno;
	}
}